/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package eu.fastl.dragster.monitoring;

import eu.fastl.dragster.monitoring.impl.ThreadLocalIdStorageImpl;
import eu.fastl.dragster.web.filter.MonitoringFilter;

/**
 * Used by the {@link MonitoringFilter} and Monitoring Advises to access the
 * {@link IdStorage}
 *
 * @author Ernst Fastl
 */
public class IdStorageProvider {
    private static IdStorage idStorage = new ThreadLocalIdStorageImpl();

    /**
     * @return the current {@link IdStorage}
     */
    public static IdStorage getIdStorage() {
        return idStorage;
    }

    public static void setIdStorage(IdStorage idStorage) {
        IdStorageProvider.idStorage = idStorage;
    }

    /**
     * If no Id is set in the storage create a new Id and set it into the
     * storage
     *
     * @return true if Id has been created, false otherwise
     */
    public static boolean createIdIfNecessary() {
        if (idStorage.getId() == null) {
            idStorage.setId(IdGeneratorProvider.getIdGenerator().createUniqueId());
            return true;
        }
        return false;
    }

    /**
     * Convenience Method for getting Id from the storage
     *
     * @return the current Id
     */
    public static Object getId() {
        return idStorage.getId();
    }

    /**
     * Convenience method for setting the Id to the storage
     *
     * @param id
     *            the new id
     */
    public static void setId(Object id) {
        idStorage.setId(id);
    }

}
